#include <iostream>
#include <thread>
#include <vector>

// 使用函数指针创建线程
void threadFunction() {
    std::cout << "Thread function executed." << std::endl;
}

// 使用函数对象创建线程
class ThreadFunctor {
public:
    void operator()() const {
        std::cout << "Functor thread executed." << std::endl;
    }
};

// 使用成员函数创建线程
class MyClass {
public:
    void memberFunction() const {
        std::cout << "Member function thread executed." << std::endl;
    }
};

int main() {
    // 创建线程，使用函数指针
    std::thread t1(threadFunction);

    // 创建线程，使用lambda表达式
    std::thread t2([]() {
        std::cout << "Lambda thread executed." << std::endl;
    });

    // 创建线程，使用函数对象
    ThreadFunctor functor;
    std::thread t3(functor);

    // 创建线程，使用类的成员函数
    MyClass myObject;
    std::thread t4(&MyClass::memberFunction, &myObject);

    // 确保所有线程在main函数结束前完成
    t1.join();
    t2.join();
    t3.join();
    t4.join();

    return 0;
}